package com.shujia.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo2Map {

  def main(args: Array[String]): Unit = {

    //local[4]  本地模拟4个线程
    val conf: SparkConf = new SparkConf()
      .setMaster("local[4]")
      .setAppName("map")


    //创建spark上下文对象
    val sc: SparkContext = new SparkContext(conf)


    /**
      * 闯进rdd的方式
      * 1、读取hdfs文件
      * 2、通过scala集合创建rdd
      *
      */

    val rdd1: RDD[Int] = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8, 9))


    /**
      * map 算子
      * 将数据一条一条传入后面的函数，返回一条一条数据
      * 数据是一对一的关系
      * 数据的类型可以改变
      *
      */


    val rdd2: RDD[String] = rdd1.map(i => i.toString)


    /**
      * 奇数加1
      * 偶数*2
      *
      */

    val rdd3: RDD[Int] = rdd1.map(i => i % 2 match {
      case 1 => i + 1
      case 0 => i + 2
    })


    val rdd4: RDD[Int] = rdd1.map(i => {

      println("map:" + i)
      i * 2
    })


    /**
      * 转换算子和操作算子
      *
      * 转换算子 : 会返回一个新的RDD，   转换算子是懒执行  ，需要操作算子触发执行
      * 操作算子： 触发任务执行算子，每一个操作算子都会触发一个job
      *
      */


    rdd4.foreach(println)
    rdd4.foreach(println)

  }

}
